/*
 * Copyright 2011 Alex Paréj.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.mkdir.web.controller.megosztasok;

import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import org.mkdir.ejb.DokumentumService;
import org.mkdir.ejb.MegosztasService;
import org.mkdir.model.Dokumentum;
import org.mkdir.util.DokumentumokUtil;
import org.mkdir.web.controller.felhasznalo.FelhasznaloSessionController;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author Alex Paréj
 */
public abstract class BaseMegosztasokController implements Serializable {

    @Inject
    protected FelhasznaloSessionController usc;
    @Inject
    protected MegosztasService megosztasService;
    @Inject
    protected DokumentumService dokumentumService;
    private List<Dokumentum> dokumenumok;
    private List<Dokumentum> filteredDokumentumok;
    private Dokumentum[] valasztottDokumentumok;

    protected abstract List<Dokumentum> getAdatbazisbolDokumentumok();

    protected List<Dokumentum> getDokumentumok() {
        if (dokumenumok == null) {
            dokumenumok = getAdatbazisbolDokumentumok();
        }
        return dokumenumok;
    }

    public Dokumentum[] getValasztottDokumentumok() {
        return valasztottDokumentumok;
    }

    public void setValasztottDokumentumok(Dokumentum[] valasztottDokumentumok) {
        this.valasztottDokumentumok = valasztottDokumentumok;
    }

    public boolean isTobbDokumentumValasztva() {
        return valasztottDokumentumok != null && valasztottDokumentumok.length > 1;
    }

    public boolean isNincsDokumentumValasztva() {
        return valasztottDokumentumok == null || valasztottDokumentumok.length == 0;
    }

    public StreamedContent getLetoltendoDokumentumok() {
        return DokumentumokUtil.getLetoltendoDokumentum(valasztottDokumentumok);
    }

    public void invalidalDokumentumok() {
        dokumenumok = null;
    }

    public boolean isKedvenc(Dokumentum dokumentum) {
        return dokumentum.isKedvenc(usc.getFelhasznalo());
    }

    public void kapcsolKedvencListener() {
        dokumentumService.kapcsolKedvenc(valasztottDokumentumok, usc.getFelhasznalo());
        invalidalDokumentumok();
    }

    public String getSorrendKedvencek(Dokumentum dokumentum) {
        return isKedvenc(dokumentum) ? "a" + dokumentum.getNev() : "b" + dokumentum.getNev();
    }

    public List<Dokumentum> getFilteredDokumentumok() {
        return filteredDokumentumok;
    }

    public void setFilteredDokumentumok(List<Dokumentum> filteredDokumentumok) {
        this.filteredDokumentumok = filteredDokumentumok;
    }
}
